import router from "@/router";
import nprogress from "nprogress";
import "nprogress/nprogress.css";
import store from "@/store";

const whiteList = ["/login", "/404"];

router.beforeEach(async (to, from, next) => {
  nprogress.start();
  // 首先先判断是否有token
  if (store.getters.token) {
    // 只有有token的时候 才能获取资料
    if (to.path === "/login") {
      // 如果访问的是登录页
      // 跳转到主页
      next("/");
      // next（地址）并没有执行后置守卫
      nprogress.done();
    } else {
      // 先判断是否已经获取过用户信息了，如果获取过就不再获取
      if (!store.getters.userInfoId) {
        const { menus } = await store.dispatch("user/getUserInfo");
        console.log(menus);
        // 如果说后续 需要根据用户资料获取数据的话 这里必须改成 同步
        const routes = await store.dispatch("permission/filterRoutes", menus);
        // routes就是筛选得到的动态路由
        console.log(routes);
        // 筛选用户的可用路由
        // 添加到动态路由到路由表  铺路
        router.addRoutes([
          ...routes,
          { path: "*", redirect: "/404", hidden: true },
        ]);

        next(to.path); // 相当于跳到对应的地址  相当于多做一次跳转  为什么要多做一次跳转
      } else {
        next(); // 放行
      }
    }
  } else {
    // 没有token
    if (whiteList.includes(to.path)) {
      next();
    } else {
      next("/login"); // 中转到登录页
      nprogress.done();
    }
  }
});

/** *
 * 后置守卫
 * **/
router.afterEach(() => {
  nprogress.done();
});
